﻿using Org.BouncyCastle.Asn1.X509;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
using Zhaoxi.SqlSugar.Common;
using Zhaoxi.SqlSugar.Models;

namespace Zhaoxi.SqlSugarAdvanced
{
    /// <summary>
    /// 事务
    /// </summary>
    public class TransactionManager
    {
        #region 单库事务
        /// <summary>
        /// 单库事务
        /// </summary>
        public static void SingleDatabase()
        {
            ConnectionConfig connectionConfig = new ConnectionConfig()
            {
                ConnectionString = CustomConnectionConfig.ConnectionString001,
                IsAutoCloseConnection = true,
                DbType = DbType.SqlServer
            };
            //单库事务
            using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
            {
                //单库事务 
                db.Deleteable<Company>().ExecuteCommand();
                db.Deleteable<OrderHead>().ExecuteCommand();
                Company company = new Company()
                {
                    CompanyName = "武汉朝夕教育教育科技有限公司",
                    CreateTime = DateTime.Now,
                };
                OrderHead orderHead = new OrderHead()
                {
                    Id = 100000,
                    CreateTime = DateTime.Now,
                    Name = "测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据"
                };

                //db.Insertable<Company>(company).ExecuteCommand();
                //db.Insertable<OrderHead>(orderHead).ExecuteCommand();

                #region 单库事务
                try
                {
                    orderHead.Id = 1000001;
                    db.Ado.BeginTran(); // 开始事务
                    db.Insertable<Company>(company).ExecuteCommand();
                    db.Insertable<OrderHead>(orderHead).ExecuteCommand();
                    db.Ado.CommitTran();// 提交事务
                }
                catch (Exception ex)
                {
                    db.Ado.RollbackTran();//回滚事务
                }
                #endregion
            }
        }
        #endregion

        #region 跨库事务SqlSugarClient实现
        /// <summary>
        /// 跨库事务SqlSugarClient实现
        /// </summary>
        public static void MultipleDatabaseSqlSugarClient()
        {
            List<ConnectionConfig> connectionConfigList = new List<ConnectionConfig>()
                {
                     new ConnectionConfig()
                     {
                            ConfigId= "db1",
                            ConnectionString = CustomConnectionConfig.ConnectionString001,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                     },
                     new ConnectionConfig()
                     {
                            ConfigId= "db2",
                            ConnectionString = CustomConnectionConfig.ConnectionString003,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                      }
                };
            using (SqlSugarClient db = new SqlSugarClient(connectionConfigList))
            {
                #region 单独操作

                db.GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                db.GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();

                OrderHead orderHead = new OrderHead()
                {
                    Id = 100000,
                    CreateTime = DateTime.Now,
                    Name = "测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数测试事务数"
                };
                OrderItem orderItem = new OrderItem()
                {
                    ItemId = 345,
                    CreateTime = DateTime.Now,
                    OrderId = 1000,
                    Price = 2000
                };
                //db.GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                //db.GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();


                #endregion

                #region 跨库事务
                try
                {
                    db.GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                    db.GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();
                    orderHead.Id = 100002;
                    orderItem.ItemId = 456;

                    db.BeginTran();    //SqlSugarClient 可以直接启动事务
                    db.GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                    db.GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();
                    db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();//如果上面的事务中发生了异常，会进入到这里，在这里做事务的回滚
                }
                #endregion
            }
        }
        #endregion

        #region 跨库事务ISqlSugarClient实现
        /// <summary>
        ///  跨库事务ISqlSugarClient实现
        /// </summary>
        public static void MultipleDatabaseISqlSugarClient()
        {
            List<ConnectionConfig> connectionConfigList = new List<ConnectionConfig>()
                {
                     new ConnectionConfig()
                     {
                            ConfigId= "db1",
                            ConnectionString = CustomConnectionConfig.ConnectionString001,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                     },
                     new ConnectionConfig()
                     {
                            ConfigId= "db2",
                            ConnectionString = CustomConnectionConfig.ConnectionString003,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                      }
                };
            using (ISqlSugarClient db = new SqlSugarClient(connectionConfigList))
            {
                #region 单独操作

                //ITenant tenant = db.AsTenant();


                db.AsTenant().GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                db.AsTenant().GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();

                OrderHead orderHead = new OrderHead()
                {
                    Id = 100000,
                    CreateTime = DateTime.Now,
                    Name = "测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据"
                };
                OrderItem orderItem = new OrderItem()
                {
                    ItemId = 345,
                    CreateTime = DateTime.Now,
                    OrderId = 1000,
                    Price = 2000
                };

                //db.AsTenant().GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                //db.AsTenant().GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();

                #endregion

                try
                {


                    db.AsTenant().GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                    db.AsTenant().GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();
                    orderHead.Id = 100002;
                    orderItem.ItemId = 456;

                    db.AsTenant().BeginTran();
                    db.AsTenant().GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                    db.AsTenant().GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();
                    db.AsTenant().CommitTran();
                }
                catch (Exception ex)
                {
                    db.AsTenant().RollbackTran();
                }
            }
        }
        #endregion

        #region 事务语法糖 - 开启事务语法糖 - 推荐使用
        /// <summary>
        /// 事务语法糖 - 开启事务语法糖 - 推荐使用
        /// </summary>
        public static void TransactionSyntaxSugar()
        {
            List<ConnectionConfig> connectionConfigList = new List<ConnectionConfig>()
                {
                     new ConnectionConfig()
                     {
                            ConfigId= "db1",
                            ConnectionString = CustomConnectionConfig.ConnectionString001,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                     },
                     new ConnectionConfig()
                     {
                            ConfigId= "db2",
                            ConnectionString = CustomConnectionConfig.ConnectionString003,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                      }
                };
            using (SqlSugarClient db = new SqlSugarClient(connectionConfigList))
            {
                #region 单独操作

                db.GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                db.GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();

                OrderHead orderHead = new OrderHead()
                {
                    Id = 100000,
                    CreateTime = DateTime.Now,
                    Name = "测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据测试事务数据"
                };
                OrderItem orderItem = new OrderItem()
                {
                    ItemId = 345,
                    CreateTime = DateTime.Now,
                    OrderId = 1000,
                    Price = 2000
                };
                //db.GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                //db.GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();

                #endregion

                #region 自动异常 发生异常自动回滚返 
                {
                    db.GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                    db.GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();

                    // 事务语法糖
                    DbResult<bool> result = db.UseTran(() => // 开启事务，发生异常自动回滚
                    {
                        //在这里就是包含了所有的业务逻辑处理的 
                        db.GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                        db.GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();
                        return true;// 返回值等行result.Data
                    });

                    if (result.Data == false) //返回值为false
                    {
                        Console.WriteLine("处理失败了，事务已经回滚");
                        //result.Data 业务的返回值 
                        //如果是上面的逻辑 result.Data==true肯定业务成功并且事务成功
                        //if(result.IsSuccess==false)//事务执行了回滚
                        //if(result.IsSuccess==true)//事务提交完成
                    }
                }
                #endregion


                #region 全局异常的，直接出错扔出错并且回滚
                {
                    db.GetConnection("db1").Deleteable<OrderHead>().ExecuteCommand();
                    db.GetConnection("db2").Deleteable<OrderItem>().ExecuteCommand();
                    try
                    {
                        // 事务语法糖
                        using (var tran = db.UseTran()) // // 开启事务，发生异常自动回滚
                        {
                            //业务代码
                            //里面禁止写 try处理事务逻辑，格式一定按现在的风格来

                            db.GetConnection("db2").Insertable<OrderItem>(orderItem).ExecuteCommand();
                            db.GetConnection("db1").Insertable<OrderHead>(orderHead).ExecuteCommand();
                            tran.CommitTran();
                        }
                        //要写 try处理异常可以写在外面 
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("异常已经捕捉，事务已回滚");
                    }
                }
                #endregion
            }
        }
        #endregion

        /// <summary>
        /// 打包提交 - 只能在一个数据库使用 - 不适合批量插入 类似于事务
        /// </summary>
        public static void PacAndSubmit()
        {

            ConnectionConfig connectionConfig = new ConnectionConfig()
            { 
                ConnectionString = CustomConnectionConfig.ConnectionString001,
                IsAutoCloseConnection = true,
                DbType = DbType.SqlServer
            };
            using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
            {
                db.Aop.OnLogExecuting = (s, p) =>
                {
                    Console.WriteLine("----------------------------");
                    Console.WriteLine($"Sql语句:{s}");
                };
                db.Deleteable<Company>().ExecuteCommand();

                {
                    db.Insertable<Company>(new Company()
                    {
                        CompanyName = "朝夕教育",
                        CreateTime = DateTime.Now

                    }).AddQueue(); // 请求添加到队列 后面打包统一处理
                     
                    db.SaveQueues(); // 执行打包请求
                }


                {
                    db.Insertable<Company>(new Company
                    {
                        CompanyName = "朝夕教育",
                        CreateTime = DateTime.Now

                    }).AddQueue();// 请求添加到队列 后面打包统一处理

                    Company company = db.Queryable<Company>()
                        .OrderBy(c => c.Id, OrderByType.Desc)
                        .First();

                    company.CompanyName = "朝夕教育=====修改成===朝夕教育科技有限公司";

                    db.Updateable<Student>(company).AddQueue();// 请求添加到队列 后面打包统一处理

                    db.SaveQueues(); // 执行打包请求

                }

                //多个查询返回
                {
                    db.Queryable<Company>().AddQueue();// 请求添加到队列 后面打包统一处理
                    db.Queryable<Company>().AddQueue();// 请求添加到队列 后面打包统一处理
                    db.AddQueue("select * from Company where id=@id", new { id = 1 });
                    var result2 = db.SaveQueues<Company, Company, Company>(); // 执行打包请求
                }
            }


            List<ConnectionConfig> connectionConfigList = new List<ConnectionConfig>()
                {
                     
                     new ConnectionConfig()
                     {
                            ConfigId= "db2",
                            ConnectionString = CustomConnectionConfig.ConnectionString003,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                      },new ConnectionConfig()
                     {
                            ConfigId= "db1",
                            ConnectionString = CustomConnectionConfig.ConnectionString001,
                            IsAutoCloseConnection = true,
                            DbType = DbType.SqlServer
                     }
                };

            #region 跨库打包操作不生效
            using (SqlSugarClient db = new SqlSugarClient(connectionConfigList))
            {
                //跨库操作
                {
                    db.DeleteableWithAttr<OrderItem>().ExecuteCommand();
                    db.DeleteableWithAttr<OrderHead>().ExecuteCommand();

                    OrderHead orderHead = new OrderHead()
                    {
                        Id = 100000,
                        CreateTime = DateTime.Now,
                        Name = "测试事务数据测"
                    };
                    OrderItem orderItem = new OrderItem()
                    {
                        ItemId = 345,
                        CreateTime = DateTime.Now,
                        OrderId = 1000,
                        Price = 2000
                    };
                    db.GetConnection("db2").Insertable<OrderItem>(orderItem).AddQueue();// 请求添加到队列 后面打包统一处理
                    db.GetConnection("db1").Insertable<OrderHead>(orderHead).AddQueue();// 请求添加到队列 后面打包统一处理
                    var result2 = db.SaveQueues(); // 执行打包请求
                }
            }
            #endregion
        }
    }
}
